﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Threading;

namespace skydream
{
    /// <summary>
    /// 
    /// </summary>
    public class serialPortHelp
    {
        //===========================发送命令===================================================
        /// <summary>
        /// 只负责发送命令字符串，（串口，命令字，长度）
        /// </summary>
        /// <param name="serPort"></param>
        /// <param name="sendCmd"></param>
        /// <param name="sendlength"></param>
        public static void sendSerialPortData(SerialPort serPort, string sendCmd, int sendlength)
        {
            if (serPort.IsOpen)
            {
                byte[] send = null;
                //首先发送命令给天线，
                send = new byte[sendlength]; //新建一个命令字符发送给卡机
                send = Transform.StringToByte(sendCmd);//回应卡机C2进行读卡操作并且将字符转为
                serPort.Write(send, 0, send.Length);
            }
            else
            {
            }
        }
        //===========================接受命令===================================================
        /// <summary>
        /// 只负责接受命令字符串对小数据量的接受，（串口）
        /// 返回接受到的命令字符
        /// 控制接收长度大于1的时候处理
        /// </summary>
        /// <param name="serPort"></param>
        /// <param name="sendCmd"></param>
        /// <param name="sendlength"></param>
        public static byte[] receiveSerialPortData(SerialPort serPort)
        {
            int size = 0;//处理接受到的内容的总数量
            byte[] b = new byte[1] { 2 };//定义总的
            byte[] temp = new byte[1] { 1 };//用来接受临时的变量
            size = serPort.BytesToRead;//读取在卡机中取出的字节长度
            b = new byte[size];
            if (size > 1)
            {
                for (int i = 0; i < size; i++)
                {
                    serPort.Read(temp, 0, 1);
                    b[i] = temp[0];
                }
            }
            return b;
        }
        //===========================接受命令===================================================
        /// <summary>
        /// 只负责接受命令字符串对小数据量的接受，（串口）
        /// 返回接受到的命令字符
        /// </summary>
        /// <param name="serPort"></param>
        /// <param name="sendCmd"></param>
        /// <param name="sendlength"></param>
        //public static byte[] receiveSerialPortData(SerialPort serPort)
        //{
        //    int size = 0;//处理接受到的内容的总数量
        //    byte[] b = new byte[1] { 2 };//定义总的
        //    byte[] temp = new byte[1] { 1 };//用来接受临时的变量
        //    size = serPort.BytesToRead;//读取在卡机中取出的字节长度
        //    b = new byte[size];
        //    for (int i = 0; i < size; i++)
        //    {
        //        serPort.Read(temp, 0, 1);
        //        b[i] = temp[0];
        //    }
        //    return b;
        //}
        /// <summary>
        /// 只负责接受命令字符串大数据量的接受，（串口，对大数据量的判断要加延迟的）
        /// </summary>
        /// <param name="serPort"></param>
        /// <param name="sendCmd"></param>
        /// <param name="sendlength"></param>
        public static byte[] receiveSerialPortData(SerialPort serPort, int deleTime)
        {
            int size = 0;//处理接受到的内容的总数量
            byte[] b = new byte[1] { 2 };//定义总的
            byte[] temp = new byte[1] { 1 };//用来接受临时的变量
            Thread.Sleep(deleTime);
            size = serPort.BytesToRead;//读取在卡机中取出的字节长度
            b = new byte[size];
            if (size > 1)
            {
                for (int i = 0; i < size; i++)
                {
                    serPort.Read(temp, 0, 1);
                    b[i] = temp[0];
                }
            }
            return b;
        }
       
    }
}
